package org.safaproject.server.dao;

import java.util.List;

import org.hibernate.SessionFactory;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Example;
import org.safaproject.server.model.Apunte;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.transaction.annotation.Transactional;

@Transactional(rollbackFor=Exception.class)
public class ApunteDAO extends HibernateDaoSupport{
	
	@Autowired
	public void initSessionFactory(SessionFactory factory) {
	    setSessionFactory(factory);
	}
	
	public String getMensajeDeSaludoAlMundoParaTestear(){
		List<Apunte> apuntes = getAllApuntes();
		return "Jelou Guerld!";
	}
	
	public Apunte getApunteById(String idApunte){
		return (Apunte) super.getHibernateTemplate().load(Apunte.class, idApunte);
	}
	
	@SuppressWarnings("unchecked")
	public List<Apunte> getAllApuntes(){
		return super.getHibernateTemplate().find("from Apunte");
	}
	
	public String saveApunte(Apunte apunte){
		super.getHibernateTemplate().save(apunte);
		return apunte.getIdApunte();
	}
	
	public String updateApunte(Apunte apunte){
		super.getHibernateTemplate().update(apunte);
		return apunte.getIdApunte();
	}
	
	
	//Esto estaría bueno hacerlo genérico para Object, pero no se dónde ponerlo
	//Si alguien sabe, que me diga por mail y lo hago (yiyo)
	@SuppressWarnings("unchecked")
	public List<Apunte> findApunteByExample(Apunte apunte) {
		Example apunteExample = Example.create(apunte).excludeZeroes()
			.ignoreCase()
			.enableLike();
		
		DetachedCriteria criteria = DetachedCriteria.forClass(Apunte.class);
		criteria.add(apunteExample);
		
		return getHibernateTemplate().findByCriteria(criteria);
	}
	
}
